home *** CD-ROM | disk | FTP | other *** search
/ Singles Flirt Up Your Life! (German) / Singles Flirt Up Your Life.iso / data1.cab / Statemachine / trashcanChar.lua < prev    next >
Text File  |  2004-01-29  |  5KB  |  178 lines

  1. -- trashcan character state machine
  2. beginStateMachine()
  3.     
  4.     onEnter(function(msg)
  5.         local trashcan = getStateObjectFromID(msg.sender);
  6.         storeStateObject("trashcan", trashcan);
  7.         
  8.         if (trashcan) then
  9.             -- trashcan does exist
  10.             if (getParent().isOneActionPointLocked(trashcan)) then
  11.                 -- action point is locked
  12.                 getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  13.                 sendMsg("emoThink", getParent().walkSO);
  14.                 exitStateMachine();
  15.             else
  16.                 getParent().lockActionPoints(trashcan);
  17.             end
  18.         else
  19.             -- trashcan does not exist anymore
  20.             getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  21.             sendMsg("emoThink", getParent().walkSO);
  22.             exitStateMachine();
  23.         end
  24.         
  25.         freeHands(getParent());
  26.                 
  27.     end )
  28.     
  29.     onExit(function(msg)
  30. --        local trashcan = retrieveStateObject("trashcan");
  31. --        getParent().unlockActionPoints(trashcan);
  32. --        getParent().stopAllActivities(trashcan);
  33. --        removeStateObject("trashcan");
  34.         
  35.         unlockAll("trashcan");    
  36.         
  37.     end )
  38.     
  39.     state("takeTrash")
  40.     
  41.         onEnter(function(msg)
  42.             print("takeTrash");
  43.             
  44.             local trashcan = retrieveStateObject("trashcan");
  45.             local fillLevel = trashcan.retrieveData("fillLevel", 0.0);
  46.             
  47.             if (fillLevel < 0.01) then
  48.                 print("takeTrash traschcan empty");
  49.                 getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  50.                 sendMsg("emoThink", getParent().walkSO);
  51.                 exitStateMachine();
  52.                 return
  53.             end
  54.             
  55.             
  56.             
  57.             getParent().startActivity("takeTrash", trashcan);
  58.             
  59.             sendDelayedMsgThis("grabCap", 960);
  60.             sendDelayedMsgThis("grabBag", 1600);
  61.             sendDelayedMsgThis("dropCap", 2600);
  62.                         
  63.             startAnimation("takeTrash");
  64.         end )
  65.     
  66.     
  67.  
  68.         onMsg("grabCap", function(msg)
  69.             getParent().playSound("trashcan"); print("grabCap");
  70.             -- attach cap to right hand of character
  71.             local trashcan = retrieveStateObject("trashcan");
  72.             local cap = trashcan.createGameObject("cap");
  73.             getParent().attachRightObjectHolder(trashcan, "cap");
  74.         end)
  75.  
  76.         onMsg("grabBag", function(msg)
  77.             -- attach cap to left hand of character
  78. --            local trashcan = retrieveStateObject("trashcan");
  79. --            local bag = trashcan.createGameObject("cap");
  80. --            getParent().attachRightObjectHolder(trashcan, "cap");
  81.             
  82.             local trashbag = getParent().loadGameObject("StandardGO","trashbag");
  83.             if (not trashbag) then print("create trashbag failed"); end
  84.             
  85.             local trashcan = retrieveStateObject("trashcan");
  86.             local stink = trashcan.findChildGO("stink");
  87.             local rate = stink.getEmitRate();
  88.             
  89.             if (rate > MIN_STINK_RATE) then
  90.                 print("bagstink rate " .. rate)
  91.                 trashbag.setChildEnable("stink", true);
  92.                 local bagstink = trashbag.findChildGO("stink");
  93.                 bagstink.setEmitRate(rate);
  94.             end;
  95.             
  96.  
  97.             
  98.             -- storeStateObject("trashbag", trashbag);
  99.             getParent().attachLeftObjectHolder(trashbag);            
  100.         end)
  101.  
  102.         onMsg("dropCap", function(msg)
  103.             getParent().playSound("trashcan");
  104.             getParent().detachRightObjectHolder();
  105.         end)
  106.  
  107.  
  108.  
  109.         onMsg("end", function(msg)
  110.             
  111.             local trashcan = retrieveStateObject("trashcan");
  112.             getParent().stopActivity("takeTrash", trashcan);
  113.             
  114.                     
  115.             if (testCancel()) then
  116.                 local trashbag = getParent().getLeftHeldObject()
  117.                 if (trashbag) then trashbag.deleteGameObject(); end
  118.                 exitStateMachine();
  119.             else
  120.  
  121.                 local character = this.getParent();
  122.                 
  123.                 local staircases = character.getObjectsWithBehavior("staircase");
  124.                 local staircase = staircases[1];
  125.                 if (not staircase) then
  126.                     print("no staircase");
  127.                     local trashbag = getParent().getLeftHeldObject()
  128.                     if (trashbag) then trashbag.deleteGameObject(); end
  129.                     character.setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  130.                     sendMsg("emoThink", character.walkSO);
  131.                     exitStateMachine();
  132.                     return 
  133.                 end
  134.                 
  135.                 
  136.                 -- walk to the closest action point
  137.                 local actionPoint = character.getFreeActionPoint(staircase, "topStep");
  138.                 --local actionPoint = character.getClosestFreeActionPointToClickPoint(staircase, {"topStep"});
  139.                 if (actionPoint) then
  140.                 -- get the walk state object
  141.                     local wso = character.walkSO;
  142.                     -- create state machine contexts
  143.                     local wsoContext = StateMachineContext();
  144.                     -- store the action point
  145.                     --wsoContext.storeData("actionPointName", actionPoint.getName());
  146.                     --wsoContext.storeStateObject("staircase", staircase);
  147.                     if (wso.walkToActionPoint(actionPoint)) then
  148.                         character.handSO.setPose("leftHandHoldHigh");
  149.                         wso.queueStateMachine("staircaseChar.goTrash", staircase, wsoContext);
  150.                         
  151.                         addTrash(trashcan, -1.0);
  152.                                                 
  153.                         exitStateMachine();
  154.                     else
  155.                         print("no path found");
  156.                         local trashbag = getParent().getLeftHeldObject()
  157.                         if (trashbag) then trashbag.deleteGameObject(); end
  158.                         character.setEmoticon(EMOTICON_NOPATH, EMOTICON_DELAY);
  159.                         sendMsg("emoThink", character.walkSO);
  160.                         exitStateMachine();
  161.                     end
  162.                 else
  163.                     print("no action point found");
  164.                     local trashbag = getParent().getLeftHeldObject()
  165.                     if (trashbag) then trashbag.deleteGameObject(); end
  166.                     character.setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  167.                     sendMsg("emoThink", character.walkSO);
  168.                     exitStateMachine();
  169.                     
  170.                 end
  171.             end
  172.                         
  173.         end )    
  174.         
  175.  
  176.                 
  177. endStateMachine()
  178.